/**
 * 甘特图布局配置
 * 控制甘特图的尺寸、间距和位置参数
 */

// 时间轴单位宽度（像素）
export const unitWidth = 160;

// 响应式单位宽度配置
export const responsiveUnitWidth = {
  // 最小单位宽度
  min: 80,
  // 最大单位宽度
  max: 200,
  // 默认单位宽度
  default: 160,
  // 根据容器宽度动态计算单位宽度
  calculate: (containerWidth: number, personColumnWidth: number, totalDays: number) => {
    const availableWidth = containerWidth - personColumnWidth;
    const calculatedWidth = Math.max(
      responsiveUnitWidth.min,
      Math.min(responsiveUnitWidth.max, availableWidth / Math.max(totalDays, 7)),
    );
    return Math.floor(calculatedWidth);
  },
};

// 半单位宽度，用于居中计算
export const halfUnitWidth = unitWidth / 2;

// 人员信息列宽度
export const personColumnWidth = 200;

// 响应式人员列宽度配置
export const responsivePersonColumnWidth = {
  // 最小人员列宽度
  min: 150,
  // 最大人员列宽度
  max: 300,
  // 默认人员列宽度
  default: 200,
  // 根据容器宽度动态计算人员列宽度
  calculate: (containerWidth: number) => {
    const calculatedWidth = Math.max(
      responsivePersonColumnWidth.min,
      Math.min(responsivePersonColumnWidth.max, containerWidth * 0.2),
    );
    return Math.floor(calculatedWidth);
  },
};

// 人员信息列内边距
export const personColumnPadding = 15;

// 任务名称左侧内边距
export const taskNamePaddingLeft = 15;

// 图表初始 X 坐标（现在需要为人员列留出空间）
export const initChartStartX = personColumnWidth + 1;

// 时间轴高度
export const timeScaleHeight = 30;

// 任务条高度
export const barHeight = 30;

// 响应式任务条高度配置
export const responsiveBarHeight = {
  // 最小任务条高度
  min: 20,
  // 最大任务条高度
  max: 40,
  // 默认任务条高度
  default: 30,
  // 根据容器高度动态计算任务条高度
  calculate: (containerHeight: number, personCount: number) => {
    const availableHeight = containerHeight - timeScaleHeight;
    const calculatedHeight = Math.max(
      responsiveBarHeight.min,
      Math.min(responsiveBarHeight.max, availableHeight / Math.max(personCount, 5)),
    );
    return Math.floor(calculatedHeight);
  },
};

// 任务条底部边距
export const barMargin = 1;

// 图表初始 Y 坐标（紧接着时间轴）
export const initChartStartY = timeScaleHeight;

// 是否显示箭头
export const showArrow = true;

// 箭头大小（任务条高度的 2/3）
export const arrowSize = barHeight / 3 * 2;

// 人员信息z-index
export const personColumnZIndex = 100;

// 箭头z-index
export const arrowZIndex = 99;

// 响应式配置
export const responsiveConfig = {
  // 断点配置
  breakpoints: {
    // 超小屏幕
    xs: 480,
    // 小屏幕
    sm: 768,
    // 中等屏幕
    md: 1024,
    // 大屏幕
    lg: 1200,
    // 超大屏幕
    xl: 1920,
  },

  // 获取当前断点
  getBreakpoint: (width: number) => {
    if (width < responsiveConfig.breakpoints.xs) {
      return 'xs';
    }
    if (width < responsiveConfig.breakpoints.sm) {
      return 'sm';
    }
    if (width < responsiveConfig.breakpoints.md) {
      return 'md';
    }
    if (width < responsiveConfig.breakpoints.lg) {
      return 'lg';
    }
    if (width < responsiveConfig.breakpoints.xl) {
      return 'xl';
    }
    return 'xl';
  },

  // 根据断点获取配置
  getConfigByBreakpoint: (breakpoint: string) => {
    const configs: Record<string, {
      unitWidth: number;
      personColumnWidth: number;
      barHeight: number;
      timeScaleHeight: number;
    }> = {
      xs: {
        unitWidth: 60,
        personColumnWidth: 120,
        barHeight: 20,
        timeScaleHeight: 25,
      },
      sm: {
        unitWidth: 80,
        personColumnWidth: 150,
        barHeight: 25,
        timeScaleHeight: 28,
      },
      md: {
        unitWidth: 120,
        personColumnWidth: 180,
        barHeight: 28,
        timeScaleHeight: 30,
      },
      lg: {
        unitWidth: 140,
        personColumnWidth: 200,
        barHeight: 30,
        timeScaleHeight: 30,
      },
      xl: {
        unitWidth: 160,
        personColumnWidth: 220,
        barHeight: 32,
        timeScaleHeight: 32,
      },
    };
    return configs[breakpoint] || configs.md;
  },
};
